package com.zenithmind.version.mapper.base;

import com.zenithmind.version.pojo.dto.RepositoryStatisticsDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 仓库统计Mapper接口 - 遵循接口隔离原则，专门处理仓库统计操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Mapper
public interface RepositoryStatisticsMapper {

    /**
     * 更新仓库统计信息
     * 
     * @param repositoryId 仓库ID
     * @param size 仓库大小
     * @param fileCount 文件数量
     * @param commitCount 提交数量
     * @param branchCount 分支数量
     * @param tagCount 标签数量
     * @return 更新行数
     */
    int updateStatistics(@Param("repositoryId") String repositoryId,
                        @Param("size") Long size,
                        @Param("fileCount") Integer fileCount,
                        @Param("commitCount") Integer commitCount,
                        @Param("branchCount") Integer branchCount,
                        @Param("tagCount") Integer tagCount);

    /**
     * 增加贡献者数量
     * 
     * @param repositoryId 仓库ID
     * @param count 增加数量
     * @return 更新行数
     */
    int increaseContributorCount(@Param("repositoryId") String repositoryId,
                                @Param("count") Integer count);

    /**
     * 更新最后活动时间
     * 
     * @param repositoryId 仓库ID
     * @return 更新行数
     */
    int updateLastActivityTime(@Param("repositoryId") String repositoryId);

    /**
     * 查询仓库统计信息
     * 
     * @param ownerId 所有者ID
     * @return 统计信息
     */
    RepositoryStatisticsDTO selectStatistics(@Param("ownerId") String ownerId);

    /**
     * 增加仓库大小
     * 
     * @param repositoryId 仓库ID
     * @param sizeIncrement 大小增量
     * @return 更新行数
     */
    int increaseRepositorySize(@Param("repositoryId") String repositoryId,
                              @Param("sizeIncrement") Long sizeIncrement);

    /**
     * 增加文件数量
     * 
     * @param repositoryId 仓库ID
     * @param fileIncrement 文件数量增量
     * @return 更新行数
     */
    int increaseFileCount(@Param("repositoryId") String repositoryId,
                         @Param("fileIncrement") Integer fileIncrement);

    /**
     * 增加提交数量
     * 
     * @param repositoryId 仓库ID
     * @param commitIncrement 提交数量增量
     * @return 更新行数
     */
    int increaseCommitCount(@Param("repositoryId") String repositoryId,
                           @Param("commitIncrement") Integer commitIncrement);

    /**
     * 增加分支数量
     * 
     * @param repositoryId 仓库ID
     * @param branchIncrement 分支数量增量
     * @return 更新行数
     */
    int increaseBranchCount(@Param("repositoryId") String repositoryId,
                           @Param("branchIncrement") Integer branchIncrement);

    /**
     * 增加标签数量
     * 
     * @param repositoryId 仓库ID
     * @param tagIncrement 标签数量增量
     * @return 更新行数
     */
    int increaseTagCount(@Param("repositoryId") String repositoryId,
                        @Param("tagIncrement") Integer tagIncrement);
}
